/*!
 * \file MouseListener.h
 * \brief Contains the definition of MouseListener
 * \author CHOUVENC Guillaume, DE CHOULOT Guillaume, MATHIEU Fabien
 */

#ifndef MOUSELISTENER_H
#define MOUSELISTENER_H

#include "bga/system/Listener.h"
#include "bga/window/MouseEvent.h"

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{

/*!
 * \brief Represents a Mouse Listener
 *
 * This class represents a Mouse Listener. We find all the functions to handle Mouse Event
 */
class BOARD_HELL_ENGINE MouseListener : public Listener
{
	public:
        /*!
         * \brief Function to handle a Mouse Button Pressed
         * \param event : MouseButton containing all the information about the sent event
         *
         * Function to handle a Mouse Button Pressed. This function is abstract.
         */
		virtual void mouseButtonPressed(const bga::MouseEvent &event) = 0;

		/*!
         * \brief Function to handle a Mouse Button Released
         * \param event : MouseButton containing all the information about the sent event
         *
         * Function to handle a Mouse Button Released. This function is abstract.
         */
		virtual void mouseButtonReleased(const bga::MouseEvent &event) = 0;

		/*!
         * \brief Function to handle a Mouse Motion
         * \param event : MouseEvent containing all the information about the sent event
         *
         * Function to handle a Mouse Motion. This function is abstract.
         */
		virtual void mouseMoved(const bga::MouseEvent &event) = 0;

		/*!
         * \brief Function to handle a Mouse Wheel Event
         * \param event : MouseEvent containing all the information about the sent event
         *
         * Function to handle a Mouse Wheel Event. This function is abstract.
         */
		virtual void mouseWheelMoved(const bga::MouseEvent &event) = 0;
	protected:

	private:

};

}

#endif // MOUSELISTENER_H

